﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;

using Fennec;

namespace IHM.ClassesFonction
{
    public class ReactionEvenementInitialisation
    {
        FenetreJeu fenetre;

        public ReactionEvenementInitialisation(FenetreJeu f)
        {
            fenetre = f;
        }

        // Global
        // EV_CHARGEMENT_VUE
        public void evenementChargementVue()
        {
            // Couleurs
            for (int i = 0; i < fenetre.partie.civilisations.Length; i++)
            {
                switch (fenetre.partie.couleurs[i])
                {
                    case ECouleur.COLOR_RED:
                        fenetre.couleurs[i] = System.Windows.Media.Brushes.Red;
                        break;
                    case ECouleur.COLOR_BLUE:
                        fenetre.couleurs[i] = System.Windows.Media.Brushes.Blue;
                        break;
                    case ECouleur.COLOR_GREEN:
                        fenetre.couleurs[i] = System.Windows.Media.Brushes.Green;
                        break;
                    case ECouleur.COLOR_ORANGE:
                        fenetre.couleurs[i] = System.Windows.Media.Brushes.Orange;
                        break;
                }
            }

            // Nom Joueur et numéro de tour
            fenetre.infoNumeroTour.Text = "Tour " + ((fenetre.partie.num_tour / fenetre.partie.civilisations.Length) + 1).ToString();

            string numeroJoueur = (fenetre.partie.civilisation_courante + 1).ToString();
            string civilisation = "";
            string type = fenetre.partie.civilisations[fenetre.partie.civilisation_courante].nom.ToString();
            switch (type)
            {
                case "CIVILISATION_EII":
                    civilisation = " (EII)";
                    break;
                case "CIVILISATION_INFO":
                    civilisation = " (INFO)";
                    break;
            }
            fenetre.infoNomJoueur.Text = "Joueur " + numeroJoueur + " : " + fenetre.partie.noms[fenetre.partie.civilisation_courante] + civilisation;
            fenetre.infoNomJoueur.Foreground = fenetre.couleurs[fenetre.partie.civilisation_courante];

            // Civilisations
            fenetre.infoJoueur1.Text = fenetre.partie.noms[fenetre.partie.civilisation_courante];
            fenetre.infoJoueur1.Foreground = fenetre.couleurs[fenetre.partie.civilisation_courante];
            fenetre.infoJoueur2.Text = fenetre.partie.noms[(fenetre.partie.civilisation_courante + 1) % fenetre.partie.civilisations.Length];
            fenetre.infoJoueur2.Foreground = fenetre.couleurs[(fenetre.partie.civilisation_courante + 1) % fenetre.partie.civilisations.Length];

            switch (fenetre.partie.civilisations.Length)
            {
                case 3:
                    fenetre.infoJoueur3.Text = fenetre.partie.noms[(fenetre.partie.civilisation_courante + 2) % fenetre.partie.civilisations.Length];
                    fenetre.infoJoueur3.Foreground = fenetre.couleurs[(fenetre.partie.civilisation_courante + 2) % fenetre.partie.civilisations.Length];
                    break;
                case 4:
                    fenetre.infoJoueur3.Text = fenetre.partie.noms[(fenetre.partie.civilisation_courante + 3) % fenetre.partie.civilisations.Length];
                    fenetre.infoJoueur3.Foreground = fenetre.couleurs[(fenetre.partie.civilisation_courante + 3) % fenetre.partie.civilisations.Length];
                    break;
            }

            // Création des formes initiales dans le cas de du chargement d'une partie
            for (int i = 0; i < fenetre.partie.civilisations.Length; i++)
            {
                foreach (Ville v in fenetre.partie.civilisations[i].villes)
                {
                    fenetre.reactionEvenementCarte.evenementCarteAjouterVille(v.position.X, v.position.Y, i);
                }
                foreach (Unité u in fenetre.partie.civilisations[i].unités)
                {
                    if (u is UnitéEtudiant)
                    {
                        fenetre.reactionEvenementCarte.evenementCarteAjouterUnite(EElement.EL_ET, u.position.X, u.position.Y, i);
                    }
                    if (u is UnitéEnseignant)
                    {
                        fenetre.reactionEvenementCarte.evenementCarteAjouterUnite(EElement.EL_ENS, u.position.X, u.position.Y, i);
                    }
                    if (u is UnitéDirecteur)
                    {
                        fenetre.reactionEvenementCarte.evenementCarteAjouterUnite(EElement.EL_DIR, u.position.X, u.position.Y, i);
                    }
                }
            }
        }

        // Création du brouillard de guerre initial à un tour
        public void brouillardDeGuerre()
        {
            fenetre.casesVisibles = new bool[fenetre.cote, fenetre.cote];
            fenetre.nombreVoyeurs = new int[fenetre.cote, fenetre.cote];

            // Récupération des informations
            for (int c1 = 0; c1 < fenetre.cote; c1++)
            {
                for (int c2 = 0; c2 < fenetre.cote; c2++)
                {
                    if ((fenetre.casesIHM[c1, c2].villeExiste && fenetre.casesIHM[c1, c2].ville.Fill.Equals(fenetre.couleurs[fenetre.partie.civilisation_courante])))
                    {
                        for (int i = c1 - 3; i <= c1 + 3; i++)
                        {
                            for (int j = c2 - 3; j <= c2 + 3; j++)
                            {
                                if (i >= 0 && i < fenetre.cote && j >= 0 && j < fenetre.cote)
                                {
                                    fenetre.casesVisibles[i, j] = true;
                                    fenetre.nombreVoyeurs[i, j]++;
                                }
                            }
                        }
                    }
                    if ((fenetre.casesIHM[c1, c2].nombreEnseignants != 0 && fenetre.casesIHM[c1, c2].enseignants.Foreground.Equals(fenetre.couleurs[fenetre.partie.civilisation_courante]))
                        || (fenetre.casesIHM[c1, c2].nombreEtudiants != 0 && fenetre.casesIHM[c1, c2].etudiants.Foreground.Equals(fenetre.couleurs[fenetre.partie.civilisation_courante]))
                        || (fenetre.casesIHM[c1, c2].directeurExiste && fenetre.casesIHM[c1, c2].directeur.Foreground.Equals(fenetre.couleurs[fenetre.partie.civilisation_courante]))
                       )
                    {
                        for (int i = c1 - 2; i <= c1 + 2; i++)
                        {
                            for (int j = c2 - 2; j <= c2 + 2; j++)
                            {
                                if (i >= 0 && i < fenetre.cote && j >= 0 && j < fenetre.cote)
                                {
                                    fenetre.casesVisibles[i, j] = true;
                                    fenetre.nombreVoyeurs[i, j] += fenetre.casesIHM[c1, c2].nombreEnseignants + fenetre.casesIHM[c1, c2].nombreEtudiants;

                                    if (fenetre.casesIHM[c1, c2].directeurExiste)
                                    {
                                        fenetre.nombreVoyeurs[i, j]++;
                                    }
                                }
                            }
                        }
                    }
                }
            }

            // Applications aux TextBox
            for (int c1 = 0; c1 < fenetre.cote; c1++)
            {
                for (int c2 = 0; c2 < fenetre.cote; c2++)
                {
                    if (fenetre.casesVisibles[c1, c2])
                    {
                        fenetre.casesIHM[c1, c2].etudiants.Visibility = Visibility.Visible;
                        fenetre.casesIHM[c1, c2].enseignants.Visibility = Visibility.Visible;
                        fenetre.casesIHM[c1, c2].directeur.Visibility = Visibility.Visible;
                    }
                    else
                    {
                        fenetre.casesIHM[c1, c2].etudiants.Visibility = Visibility.Hidden;
                        fenetre.casesIHM[c1, c2].enseignants.Visibility = Visibility.Hidden;
                        fenetre.casesIHM[c1, c2].directeur.Visibility = Visibility.Hidden;
                    }
                }
            }
        }
    }
}
